package jmine.tec.subscription;

import java.io.Serializable;

/**
 * Um {@link SubscriptionSettings} deve conter parametros para a 'inscricao' a uma subscription e deve definir univocamente os parametros de
 * uma subscricao. Quanto melhor for a qualidade dos metodos {@link #equals(Object)} e {@link #hashCode()}, melhor sera a possibilidade de
 * 
 * @author takeshi
 */
public interface SubscriptionSettings extends Serializable {

    /**
     * HashCode
     * 
     * @return int
     */
    int hashCode();

    /**
     * Equals
     * 
     * @param settings Object
     * @return boolean
     */
    boolean equals(Object settings);

    /**
     * @param <T> o tipo concreto
     * @param parameterName string o nome do parametro
     * @param parameterType o tipo do parametro
     * @return T
     */
    <T> T getParameter(String parameterName, Class<T> parameterType);

}
